#include "ADDObjetBase.h"

#include <iostream>

using namespace std;

ADDObjetBase::ADDObjetBase( const string& typeObjet )
    : SortieStd( BLANK, typeObjet ),
      TypeObjet( typeObjet )
{}

ADDObjetBase::ADDObjetBase()
    : SortieStd( DEBUG, "" ),
      TypeObjet( "" )
{}

ADDObjetBase& ADDObjetBase::operator=( const ADDObjetBase& obj )
{
    TypeObjet = obj.typeObjet();

    return *this;
}

ADDObjetBase::~ADDObjetBase()
{}

const string& ADDObjetBase::typeObjet() const
{
    return TypeObjet;
}

void ADDObjetBase::setTypeObjet( const string& typeObjet )
{
    TypeObjet = typeObjet;
}

FlotMessage& ADDObjetBase::error() const
{
    return SortieStd << ERR;
}

FlotMessage& ADDObjetBase::warning() const
{
    return SortieStd << WARN;
}

FlotMessage& ADDObjetBase::blank() const
{
    return SortieStd << BLANK;
}

FlotMessage& ADDObjetBase::info() const
{
    return SortieStd << INFO;
}

FlotMessage& ADDObjetBase::func() const
{
    return SortieStd << FUNC;
}

FlotMessage& ADDObjetBase::linfo() const
{
    return SortieStd << LINFO;
}

FlotMessage& ADDObjetBase::lfunc() const
{
    return SortieStd << LFUNC;
}

FlotMessage& ADDObjetBase::debug() const
{
    return SortieStd << DEBUG;
}

void ADDObjetBase::empileNiveau( const DebugLevelType* level ) const
{
    if ( Historique.empty() )
    {
        Historique.push( &SortieStd.niveauInstance() );
        Historique.push( level );
        IdemPrecedent.push( false );

        SortieStd.setNiveauInstance( *level );
    }
    else if ( *Historique.top() == *level )
    {
        IdemPrecedent.push( true );
    }
    else
    {
        Historique.push( level );
        IdemPrecedent.push( false );

        SortieStd.setNiveauInstance( *level );
    }
}

void ADDObjetBase::depileNiveau() const
{
    if ( !IdemPrecedent.top() )
    {
        Historique.pop();

        SortieStd.setNiveauInstance( *Historique.top() );
    }
    
    IdemPrecedent.pop();
}
